/**
  ******************************************************************************
  * @file    GPIO/GPIO_IOToggle/stm32f4xx_it.c 
  * @author  MCD Application Team
  * @version V1.4.0
  * @date    04-August-2014
  * @brief   Main Interrupt Service Routines.
  *          This file provides template for all exceptions handler and 
  *          peripherals interrupt service routine.
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
  *
  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
  * You may not use this file except in compliance with the License.
  * You may obtain a copy of the License at:
  *
  *        http://www.st.com/software_license_agreement_liberty_v2
  *
  * Unless required by applicable law or agreed to in writing, software 
  * distributed under the License is distributed on an "AS IS" BASIS, 
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  *
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx_it.h"
#include "drv_led1.h"
#include "oled.h"
#include "string.h"
#include "drv_systick.h"
/** @addtogroup STM32F4xx_StdPeriph_Examples
  * @{
  */

/** @addtogroup GPIO_IOToggle
  * @{
  */

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

/******************************************************************************/
/*            Cortex-M4 Processor Exceptions Handlers                         */
/******************************************************************************/

/**
  * @brief   This function handles NMI exception.
  * @param  None
  * @retval None
  */
void NMI_Handler(void)
{
}

/**
  * @brief  This function handles Hard Fault exception.
  * @param  None
  * @retval None
  */
void HardFault_Handler(void)
{
  /* Go to infinite loop when Hard Fault exception occurs */
  while (1)
  {
  }
}

/**
  * @brief  This function handles Memory Manage exception.
  * @param  None
  * @retval None
  */
void MemManage_Handler(void)
{
  /* Go to infinite loop when Memory Manage exception occurs */
  while (1)
  {
  }
}

/**
  * @brief  This function handles Bus Fault exception.
  * @param  None
  * @retval None
  */
void BusFault_Handler(void)
{
  /* Go to infinite loop when Bus Fault exception occurs */
  while (1)
  {
  }
}

/**
  * @brief  This function handles Usage Fault exception.
  * @param  None
  * @retval None
  */
void UsageFault_Handler(void)
{
  /* Go to infinite loop when Usage Fault exception occurs */
  while (1)
  {
  }
}

/**
  * @brief  This function handles SVCall exception.
  * @param  None
  * @retval None
  */
void SVC_Handler(void)
{
}

/**
  * @brief  This function handles Debug Monitor exception.
  * @param  None
  * @retval None
  */
void DebugMon_Handler(void)
{
}

/**
  * @brief  This function handles PendSVC exception.
  * @param  None
  * @retval None
  */
void PendSV_Handler(void)
{
}

/**
  * @brief  This function handles SysTick Handler.
  * @param  None
  * @retval None
  */
void SysTick_Handler(void)
{
}

/******************************************************************************/
/*                 STM32F4xx Peripherals Interrupt Handlers                   */
/*  Add here the Interrupt Handler for the used peripheral(s) (PPP), for the  */
/*  available peripheral interrupt handler's name please refer to the startup */
/*  file (startup_stm32f40xx.s/startup_stm32f427x.s/startup_stm32f429x.s).    */
/******************************************************************************/

/**
  * @brief  This function handles PPP interrupt request.
  * @param  None
  * @retval None
  */
/*void PPP_IRQHandler(void)
{
}*/

/**
  * @}
  */ 

/**
  * @}
  */ 

char usart_buf[100];
uint8_t idex=0;
extern char show_msg[100];
extern uint8_t led_val ;
extern uint8_t msg_flag ;
extern uint8_t beep_val,key_val3,key_val4,page_flag;
//串口中断处理函数
void USART1_IRQHandler(void)
{
	if(USART_GetITStatus(USART1, USART_IT_RXNE))//接收中断
	{
		USART_ClearITPendingBit(USART1, USART_IT_RXNE);
		USART_SendData(USART1,USART_ReceiveData(USART1));
		//usart_buf[idex]= USART_ReceiveData(USART1);
		//idex++;
	}/*
	if(USART_GetITStatus(USART1, USART_IT_IDLE))//空闲中断
	{
		USART_ReceiveData(USART1);
		//USART_SendData(USART1, 'a');
		if(strcmp("open",usart_buf) == 0)
		{
			led_val = 1 ;
			drv_led_open();
		}
		if(strcmp("close",usart_buf) == 0)
		{
			led_val = 0 ;
			drv_led_close();
		}
		if(strcmp("beepopen",usart_buf) == 0)
		{
			beep_val = 1 ;
			drv_spk_open();
		}
		if(strcmp("beepclose",usart_buf) == 0)
		{
			beep_val = 0 ;
			drv_spk_close();
		}
		idex =0;
		memset(usart_buf,0,sizeof(usart_buf));
	}*/
}

void USART2_IRQHandler(void)
{
	if(USART_GetITStatus(USART2, USART_IT_RXNE))//接收中断
	{
		USART_ClearITPendingBit(USART2, USART_IT_RXNE);
		USART_SendData(USART1,USART_ReceiveData(USART2));
		if(page_flag == 4)
		{
			usart_buf[idex]= USART_ReceiveData(USART2);
			if(usart_buf[idex-1]=='\r'&&usart_buf[idex]=='\n')
			{
				msg_flag = 1 ;
				if(strcmp("+IPD,10:led3open\r\n",usart_buf) == 0)
				{
					led_val = 1 ;
					drv_led_open();
				}
				else if(strcmp("+IPD,11:led3close\r\n",usart_buf) == 0)
				{
					led_val = 0 ;
					drv_led_close();
				}
				else if(strcmp("+IPD,10:beepopen\r\n",usart_buf) == 0)
				{
					beep_val = 1 ;
					drv_spk_open() ;//开蜂鸣器.
				}
				else if(strcmp("+IPD,11:beepclose\r\n",usart_buf) == 0)
				{
					beep_val = 0 ;
					drv_spk_close() ;//关蜂鸣器
				}
				//OLED_Clear();
				strcpy(show_msg,usart_buf+8);
				idex =0;
				memset(usart_buf,0,sizeof(usart_buf));
				msg_flag = 0 ;
			}
			else
			{
				idex++;
			}
		}
	}
		
		
	/*
	if(USART_GetITStatus(USART2, USART_IT_IDLE))//空闲中断
	{
		USART_ReceiveData(USART2);
		USART_SendData(USART1, USART_ReceiveData(USART2));
	}*/
}

//外部中断处理函数
void EXTI4_IRQHandle(void)
{
	if (EXTI_GetITStatus(EXTI_Line4))
	{
		EXTI_ClearITPendingBit(EXTI_Line4);
		if(page_flag == 2)
		{
			led_val = ~led_val ;
			if (led_val == 0 )
			{
				drv_led_close() ;
				led_show_close();
			}
			else
			{
				drv_led_open() ;
				led_show_open();
			}
		}
	}
}

//外部中断处理函数
void EXTI9_5_IRQHandler(void)
{
	if (EXTI_GetITStatus(EXTI_Line5))
	{
		EXTI_ClearITPendingBit(EXTI_Line5);
		if(page_flag == 2)
		{
			beep_val = ~beep_val ;
			if (beep_val == 0 )
			{
				//drv_spk_close() ;//关蜂鸣器
				beep_show_close();
				drv_led_close() ;
				led_show_close();
			}
			else
			{
				//drv_spk_open() ;//开蜂鸣器.
				beep_show_open();
				drv_led_open() ;
				led_show_open();
			}
			drv_systick_delayms(70);
		}
	}

	if (EXTI_GetITStatus(EXTI_Line6))
	{
		EXTI_ClearITPendingBit(EXTI_Line6);
		//页面
		page_flag--;
		if(page_flag<1)
		{
			page_flag = 4 ; 
		}
		//界面显示跳转
		if(page_flag == 1)
		{
			OLED_Clear();
			Show_Page1();
		}
		if(page_flag == 2)
		{
			OLED_Clear();
			Show_Page2();
		}
		if(page_flag == 3)
		{
			OLED_Clear();
			Show_Page3();
		}
		if(page_flag == 4)
		{
			OLED_Clear();
			Show_Page4();
		}
	}
}

//外部中断处理函数
void EXTI15_10_IRQHandler(void)
{
	if (EXTI_GetITStatus(EXTI_Line13))
	{
		EXTI_ClearITPendingBit(EXTI_Line13);
		//页面
		page_flag++;
		if(page_flag>4)
		{
			page_flag = 1 ; 
		}
		//界面显示跳转
		if(page_flag == 1)
		{
			OLED_Clear();
			Show_Page1();
		}
		if(page_flag == 2)
		{
			OLED_Clear();
			Show_Page2();
		}
		if(page_flag == 3)
		{
			OLED_Clear();
			Show_Page3();
		}
		if(page_flag == 4)
		{
			OLED_Clear();
			Show_Page4();
		}
	}
}


//定时中断处理函数
void TIM6_DAC_IRQHandler(void)
{
	 if(TIM_GetITStatus(TIM6, TIM_IT_Update))
	 {
			TIM_ClearITPendingBit( TIM6, TIM_IT_Update) ;
			led_val = ~led_val ;
	 }
}

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
